'use strict';
const mongoose = require('mongoose');
const md5 = require('md5');

let schema = new mongoose.Schema({
    loginId: {
        type: String,
        required: true
    },
    password: String,
    token: {//用于非登陆验证
        type:String,
        default:''
    },
    loginTimes: {
        type: Number,
        "default": 0
    },
    lastLoginIp: {
        type:String,
        default:''
    },
    status: {
        type: Number,
        "default": 0   //0代表普通管理员  10代表超级管理员  -1代表该管理员被禁止登陆
    },
    // channel:{ //渠道管理
    //     type:require('./admin.channel'),
    //     default:{}
    // },
    // docker:{ //服务器管理
    //     type:require('./admin.docker'),
    //     default:{}
    // },
    // gameUser:{ //用户管理
    //     type:require('./admin.gameUser'),
    //     default:{}
    // },
    // census:{ //统计管理
    //     type:require('./admin.census'),
    //     default:{}
    // },
    // notice:{ //通知管理
    //     type:require('./admin.notice'),
    //     default:{}
    // },
    // clickEvent:{ //事件管理
    //     type:require('./admin.clickEvents'),
    //     default:{}
    // },
    // admin:{ //管理员管理
    //     type:require('./admin.admin'),
    //     default:{}
    // },
});
schema.index({loginId: 1}, {unique: true});
schema.index({loginId: 1, token: 1}, {unique: false});

schema.statics = {
    //验证登陆，如果成功登陆，则返回token
    checkLogin: async function (loginId, password) {
        let admin = await this.findOne({loginId: loginId});
        if (!!admin && admin.password === md5(password)) {
            let token = md5(new Date().getTime().toString());
            await this.update({loginId: loginId}, {$set: {token: token}}).exec();
            return {loginId: loginId, token: token};
        } else {
            return false;
        }
    },
    //验证用户token是否合法
    checkToken: async function (loginId, token) {
        let admin = await this.findOne({loginId: loginId, token: token});
        return admin;
    }
};
schema.methods = {
    dictionary:require('./admin.dictionary'),
    admin:require('./admin.admin'),
    census:require('./admin.census'),
    channel:require('./admin.channel'),
    clickEvent:require('./admin.clickEvents'),
    docker:require('./admin.docker'),
    gameUser:require('./admin.gameUser'),
    notice:require('./admin.notice'),
    friendlyLink:require('./admin.friendlyLink'),
    friendlyLinkClick: require('./admin.friendlyLinkClick'),
    friendlyLinkGroup: require('./admin.friendlyLinkGroup'),
    clickCensus: require('./admin.clickCensus'),
    //验证修改密码，如果成功修改，则返回token
    changePwd: async function (options) {
        if (this.password === md5(options.oldPwd)) {
            this.password = md5(options.newPwd);
            this.token = md5(new Date().getTime().toString());
            await this.save();
            return {loginId: this.loginId, token: this.token};
        } else {
            return false;
        }
    },

};
module.exports = schema;